atexit関数は、プロセスが正常終了した時に呼び出される関数を登録します。ここで登録した関数は、main関数から戻る時や、exit関数が実行された時に呼び出されます。
#include <stdlib.h>
int atexit(void (*function)(void));
*functionは呼び出される関数を指定します。指定する関数は引数および、戻り値はありません。
戻り値として、正常に処理できた場合は0を、エラーの場合は0以外の値を返します。
プログラム 例
#include <stdio.h> #include <stdlib.h> #define SIZE 1024 /* プログラム終了メッセージ出力関数 */ void ExitMess(void); int main() { FILE *fp; char buff[SIZE]; /* プログラム終了時に実行する関数を登録 */ if (atexit(ExitMess) != 0) { printf('atexit関数に失敗しました\n'); abort(); } if ((fp = fopen('temp_1.txt', 'r')) == NULL) { printf('ファイルのオープンに失敗しました\n'); abort(); } while(fgets(buff, SIZE, fp) != NULL) { printf('%s', buff); } fclose(fp); return 0; } /* プログラム終了メッセージ出力 */ void ExitMess() { printf('★★★ 正常終了しました ★★★\n'); }
例の実行結果
$ ./atexit.exe Hello World!!. Bye. ★★★ 正常終了しました ★★★ $ $ mv temp_1.txt temp_bk.txt $ $ ./atexit.exe ファイルのオープンに失敗しました アボートしました $